﻿using System;
using System.Collections;
using System.Collections.Generic;
using SharpSqlAnalyzer.nodes.hive;
using SharpSqlAnalyzer.stmt;

namespace SharpSqlAnalyzer.nodes
{
	// Token: 0x020002DA RID: 730
	public class TExpression : TParseTreeNode
	{
		// Token: 0x17000534 RID: 1332
		// (get) Token: 0x06001885 RID: 6277 RVA: 0x0032975D File Offset: 0x0032795D
		// (set) Token: 0x06001884 RID: 6276 RVA: 0x00329754 File Offset: 0x00327954
		public virtual TCustomSqlStatement OwnerStmt
		{
			get
			{
				return this._OwnerStmt;
			}
			set
			{
				this._OwnerStmt = value;
			}
		}

		// Token: 0x06001886 RID: 6278 RVA: 0x00329765 File Offset: 0x00327965
		public TExpression()
		{
		}

		// Token: 0x06001887 RID: 6279 RVA: 0x00329774 File Offset: 0x00327974
		public TExpression(EExpressionType exprType)
		{
			this.ExpressionType = exprType;
		}

		// Token: 0x06001888 RID: 6280 RVA: 0x0032978A File Offset: 0x0032798A
		public TExpression(EExpressionType exprType, TConstant constant)
		{
			this.ExpressionType = exprType;
			if (this.ExpressionType == EExpressionType.simple_constant_t)
			{
				this.ConstantOperand = constant;
			}
		}

		// Token: 0x06001889 RID: 6281 RVA: 0x003297B0 File Offset: 0x003279B0
		public TExpression(EExpressionType exprType, TObjectName dbObject)
		{
			this.ExpressionType = exprType;
			if (this.ExpressionType == EExpressionType.simple_object_name_t)
			{
				this.ObjectOperand = dbObject;
			}
		}

		// Token: 0x0600188A RID: 6282 RVA: 0x003297D6 File Offset: 0x003279D6
		public TExpression(EExpressionType exprType, TFunctionCall func)
		{
			this.ExpressionType = exprType;
			if (this.ExpressionType == EExpressionType.function_t)
			{
				this.FunctionCall = func;
			}
		}

		// Token: 0x0600188B RID: 6283 RVA: 0x003297FD File Offset: 0x003279FD
		public TExpression(EExpressionType exprType, TExpression left, TExpression right)
		{
			this.ExpressionType = exprType;
			this.LeftOperand = left;
			this.RightOperand = right;
		}

		// Token: 0x0600188C RID: 6284 RVA: 0x00329821 File Offset: 0x00327A21
		public TExpression(EExpressionType exprType, TExpression left, TExpression right, EComparisonType comparisonType)
		{
			this.ExpressionType = exprType;
			this.LeftOperand = left;
			this.RightOperand = right;
			this.ComparisonType = comparisonType;
		}

		// Token: 0x0600188D RID: 6285 RVA: 0x00329850 File Offset: 0x00327A50
		public TExpressionList searchColumn(string columnName)
		{
			TExpressionList texpressionList = new TExpressionList();
			this.inOrderTraverse(new searchColumnVisitor(columnName, texpressionList));
			return texpressionList;
		}

		// Token: 0x0600188E RID: 6286 RVA: 0x00329874 File Offset: 0x00327A74
		public void remove()
		{
			if (this.ExpressionType == EExpressionType.removed_t)
			{
				return;
			}
			TExpression parentExpr = this.ParentExpr;
			this.ExpressionType = EExpressionType.removed_t;
			if (parentExpr == null)
			{
				return;
			}
			switch (parentExpr.ExpressionType)
			{
			case EExpressionType.arithmetic_plus_t:
			case EExpressionType.arithmetic_minus_t:
			case EExpressionType.arithmetic_times_t:
			case EExpressionType.arithmetic_divide_t:
			case EExpressionType.concatenate_t:
			case EExpressionType.range_t:
			case EExpressionType.power_t:
			case EExpressionType.period_ldiff_t:
			case EExpressionType.period_rdiff_t:
			case EExpressionType.period_p_intersect_t:
			case EExpressionType.period_p_normalize_t:
			case EExpressionType.contains_t:
				parentExpr.remove();
				return;
			case EExpressionType.arithmetic_modulo_t:
			case EExpressionType.arithmetic_exponentiation_t:
			case EExpressionType.bitwise_and_t:
			case EExpressionType.bitwise_or_t:
			case EExpressionType.bitwise_xor_t:
			case EExpressionType.bitwise_exclusive_or_t:
			case EExpressionType.scope_resolution_t:
			case EExpressionType.exponentiate_t:
			case EExpressionType.at_time_zone_t:
			case EExpressionType.member_of_t:
				parentExpr.remove();
				return;
			case EExpressionType.parenthesis_t:
				parentExpr.remove();
				return;
			case EExpressionType.assignment_t:
				parentExpr.remove();
				return;
			case EExpressionType.list_t:
				parentExpr.remove();
				return;
			case EExpressionType.bitwise_shift_left_t:
			case EExpressionType.bitwise_shift_right_t:
				parentExpr.remove();
				return;
			case EExpressionType.simple_comparison_t:
				parentExpr.remove();
				return;
			case EExpressionType.group_comparison_t:
				parentExpr.remove();
				return;
			case EExpressionType.unary_plus_t:
			case EExpressionType.unary_minus_t:
			case EExpressionType.unary_prior_t:
				parentExpr.remove();
				return;
			case EExpressionType.unary_connect_by_root_t:
				parentExpr.remove();
				return;
			case EExpressionType.unary_factorial_t:
				parentExpr.remove();
				return;
			case EExpressionType.unary_squareroot_t:
			case EExpressionType.unary_cuberoot_t:
			case EExpressionType.unary_factorialprefix_t:
			case EExpressionType.unary_absolutevalue_t:
			case EExpressionType.unary_bitwise_not_t:
				parentExpr.remove();
				return;
			case EExpressionType.unary_binary_operator_t:
				parentExpr.remove();
				return;
			case EExpressionType.null_t:
				parentExpr.remove();
				return;
			case EExpressionType.between_t:
				parentExpr.remove();
				return;
			case EExpressionType.pattern_matching_t:
				parentExpr.remove();
				return;
			case EExpressionType.floating_point_t:
				parentExpr.remove();
				return;
			case EExpressionType.logical_and_t:
			case EExpressionType.logical_or_t:
				if (this == parentExpr.LeftOperand)
				{
					parentExpr.RightOperand.copyTo(parentExpr);
					return;
				}
				if (this == parentExpr.RightOperand)
				{
					parentExpr.LeftOperand.copyTo(parentExpr);
					return;
				}
				return;
			case EExpressionType.logical_xor_t:
			case EExpressionType.is_t:
				parentExpr.remove();
				return;
			case EExpressionType.logical_not_t:
				parentExpr.remove();
				return;
			case EExpressionType.in_t:
				parentExpr.remove();
				return;
			case EExpressionType.is_of_type_t:
				parentExpr.remove();
				return;
			case EExpressionType.at_local_t:
			case EExpressionType.day_to_second_t:
			case EExpressionType.year_to_month_t:
				parentExpr.remove();
				return;
			case EExpressionType.collate_t:
				parentExpr.remove();
				return;
			case EExpressionType.left_join_t:
			case EExpressionType.right_join_t:
				parentExpr.remove();
				return;
			case EExpressionType.ref_arrow_t:
				parentExpr.remove();
				return;
			case EExpressionType.typecast_t:
				parentExpr.remove();
				return;
			case EExpressionType.arrayaccess_t:
				parentExpr.remove();
				return;
			case EExpressionType.sqlserver_proprietary_column_alias_t:
				parentExpr.remove();
				return;
			case EExpressionType.left_shift_t:
			case EExpressionType.right_shift_t:
				parentExpr.remove();
				return;
			case EExpressionType.array_constructor_t:
				parentExpr.remove();
				return;
			case EExpressionType.row_constructor_t:
				parentExpr.remove();
				return;
			case EExpressionType.interval_t:
				parentExpr.remove();
				return;
			case EExpressionType.multiset_union_t:
			case EExpressionType.multiset_union_distinct_t:
			case EExpressionType.multiset_intersect_t:
			case EExpressionType.multiset_intersect_distinct_t:
			case EExpressionType.multiset_except_t:
			case EExpressionType.multiset_except_distinct_t:
				parentExpr.remove();
				return;
			case EExpressionType.json_get_text:
			case EExpressionType.json_get_text_at_path:
			case EExpressionType.json_get_object:
			case EExpressionType.json_get_object_at_path:
			case EExpressionType.json_left_contain:
			case EExpressionType.json_right_contain:
			case EExpressionType.json_exist:
			case EExpressionType.json_any_exist:
			case EExpressionType.json_all_exist:
				parentExpr.remove();
				return;
			}
			parentExpr.remove();
		}

		// Token: 0x0600188F RID: 6287 RVA: 0x00329BD8 File Offset: 0x00327DD8
		public void copyTo(TExpression target)
		{
			target.ExpressionType = this.ExpressionType;
			target.LeftOperand = this.LeftOperand;
			target.RightOperand = this.RightOperand;
			target.ObjectOperand = this.ObjectOperand;
			target.FunctionCall = this.FunctionCall;
			target.SubQuery = this.SubQuery;
			target.ConstantOperand = this.ConstantOperand;
			target.ExprList = this.ExprList;
			target.OperatorToken = this.OperatorToken;
			target.ComparisonOperator = this.ComparisonOperator;
			target.BetweenOperand = this.BetweenOperand;
			target.CaseExpression = this.CaseExpression;
			target.LikeEscapeOperand = this.LikeEscapeOperand;
			target.NotToken = this.NotToken;
			target.Quantifier = this.Quantifier;
			target.QuantifierType = this.QuantifierType;
		}

		// Token: 0x06001890 RID: 6288 RVA: 0x00329CA8 File Offset: 0x00327EA8
		public TSourceToken getAndOrTokenBeforeExpr()
		{
			TSourceToken startToken = this.getStartToken();
			if (startToken == null)
			{
				return null;
			}
			TSourceToken tsourceToken = startToken.prevSolidToken();
			if (tsourceToken.tokencode == 319 || tsourceToken.tokencode == 320)
			{
				return tsourceToken;
			}
			return null;
		}

		// Token: 0x06001891 RID: 6289 RVA: 0x00329CE8 File Offset: 0x00327EE8
		public ArrayList getFlattedAndOrExprs()
		{
			if (this._expressionType != EExpressionType.logical_and_t && this._expressionType != EExpressionType.logical_or_t)
			{
				return null;
			}
			if (this.flattenVisitor.getFlattedAndOrExprs().Count == 0)
			{
				this.onlyAndOrIsNonLeaf = true;
				this.inOrderTraverse(this.flattenVisitor);
				this.onlyAndOrIsNonLeaf = false;
			}
			return this.flattenVisitor.getFlattedAndOrExprs();
		}

		// Token: 0x06001892 RID: 6290 RVA: 0x00329D42 File Offset: 0x00327F42
		public void setIndirection(TIndirection i)
		{
			this.Indirection = i;
		}

		// Token: 0x06001893 RID: 6291 RVA: 0x00329D4B File Offset: 0x00327F4B
		public void setSymmetric(bool b)
		{
			this.Symmetric = b;
		}

		// Token: 0x06001894 RID: 6292 RVA: 0x00329D54 File Offset: 0x00327F54
		public void setTypeName(TTypeName n)
		{
			this.TypeName = n;
		}

		// Token: 0x06001895 RID: 6293 RVA: 0x00329D5D File Offset: 0x00327F5D
		public void setFunctionCall(TFunctionCall c)
		{
			this.FunctionCall = c;
		}

		// Token: 0x06001896 RID: 6294 RVA: 0x00329D66 File Offset: 0x00327F66
		public void setCaseExpression(TCaseExpression ce)
		{
			this.CaseExpression = ce;
		}

		// Token: 0x06001897 RID: 6295 RVA: 0x00329D6F File Offset: 0x00327F6F
		public void setBetweenOperand(TExpression e)
		{
			this.BetweenOperand = e;
		}

		// Token: 0x06001898 RID: 6296 RVA: 0x00329D78 File Offset: 0x00327F78
		public void setNotToken(TSourceToken st)
		{
			this.NotToken = st;
		}

		// Token: 0x06001899 RID: 6297 RVA: 0x00329D81 File Offset: 0x00327F81
		public void setLikeEscapeOperand(TExpression e)
		{
			this.LikeEscapeOperand = e;
		}

		// Token: 0x0600189A RID: 6298 RVA: 0x00329D8A File Offset: 0x00327F8A
		public void setOperatorToken(TSourceToken st)
		{
			this.OperatorToken = st;
		}

		// Token: 0x0600189B RID: 6299 RVA: 0x00329D93 File Offset: 0x00327F93
		public void setQuantifier(TSourceToken st)
		{
			this.Quantifier = st;
		}

		// Token: 0x0600189C RID: 6300 RVA: 0x00329D9C File Offset: 0x00327F9C
		public void setSubQueryNode(TSelectSqlNode subquery)
		{
			this.SubQueryNode = subquery;
		}

		// Token: 0x0600189D RID: 6301 RVA: 0x00329DA5 File Offset: 0x00327FA5
		public void setRightOperand(TExpression e)
		{
			this.RightOperand = e;
		}

		// Token: 0x0600189E RID: 6302 RVA: 0x00329DAE File Offset: 0x00327FAE
		public void setLeftOperand(TExpression e)
		{
			this.LeftOperand = e;
		}

		// Token: 0x0600189F RID: 6303 RVA: 0x00329DB7 File Offset: 0x00327FB7
		public void setExprList(TExpressionList el)
		{
			this.ExprList = el;
		}

		// Token: 0x060018A0 RID: 6304 RVA: 0x00329DC0 File Offset: 0x00327FC0
		public virtual void setTokenToIdentifier()
		{
			if (this.ExpressionType == EExpressionType.simple_object_name_t)
			{
				if (this.ObjectOperand.endToken != null)
				{
					this.ObjectOperand.endToken.tokencode = 264;
					this.ObjectOperand.endToken.tokentype = ETokenType.ttidentifier;
					return;
				}
			}
			else if (this.ExpressionType == EExpressionType.simple_source_token_t)
			{
				this.SourcetokenOperand.tokencode = 264;
				this.SourcetokenOperand.tokentype = ETokenType.ttidentifier;
			}
		}

		// Token: 0x17000535 RID: 1333
		// (get) Token: 0x060018A2 RID: 6306 RVA: 0x00329E3A File Offset: 0x0032803A
		// (set) Token: 0x060018A1 RID: 6305 RVA: 0x00329E31 File Offset: 0x00328031
		public virtual EComparisonType ComparisonType
		{
			get
			{
				return this._comparisonType;
			}
			set
			{
				this._comparisonType = value;
			}
		}

		// Token: 0x060018A3 RID: 6307 RVA: 0x00329E44 File Offset: 0x00328044
		public static EComparisonType getComparisonType(TSourceToken comparisonOperator)
		{
			string astext = comparisonOperator.astext;
			EComparisonType result = EComparisonType.equalsTo;
			int tokencode = comparisonOperator.tokencode;
			switch (tokencode)
			{
			case 60:
				result = EComparisonType.lessThan;
				break;
			case 61:
				result = EComparisonType.equalsTo;
				if (astext.IndexOf("=", 1, StringComparison.Ordinal) > 0 && astext.StartsWith("<", StringComparison.Ordinal) && astext.EndsWith(">", StringComparison.Ordinal))
				{
					result = EComparisonType.nullSafeEquals;
				}
				break;
			case 62:
				result = EComparisonType.greaterThan;
				break;
			default:
				switch (tokencode)
				{
				case 290:
					if (astext.StartsWith("!", StringComparison.Ordinal) && astext.EndsWith("=", StringComparison.Ordinal))
					{
						result = EComparisonType.notEqualToExclamation;
					}
					else if (astext.StartsWith("^", StringComparison.Ordinal) && astext.EndsWith("=", StringComparison.Ordinal))
					{
						result = EComparisonType.notEqualToCaret;
					}
					else if (astext.StartsWith("<", StringComparison.Ordinal) && astext.EndsWith(">", StringComparison.Ordinal))
					{
						result = EComparisonType.notEqualToBrackets;
					}
					break;
				case 291:
					result = EComparisonType.notGreaterThan;
					if (astext.StartsWith("^", StringComparison.Ordinal))
					{
						result = EComparisonType.notGreaterThanToCaret;
					}
					break;
				case 292:
					result = EComparisonType.notLessThan;
					if (astext.StartsWith("^", StringComparison.Ordinal))
					{
						result = EComparisonType.notLessThanToCaret;
					}
					break;
				case 293:
					result = EComparisonType.greaterThanOrEqualTo;
					break;
				case 294:
					result = EComparisonType.lessThanOrEqualTo;
					break;
				}
				break;
			}
			return result;
		}

		// Token: 0x17000536 RID: 1334
		// (get) Token: 0x060018A4 RID: 6308 RVA: 0x00329F6F File Offset: 0x0032816F
		// (set) Token: 0x060018A5 RID: 6309 RVA: 0x00329F77 File Offset: 0x00328177
		public virtual TAliasClause ExprAlias
		{
			get
			{
				return this._exprAlias;
			}
			set
			{
				this._exprAlias = value;
			}
		}

		// Token: 0x17000537 RID: 1335
		// (get) Token: 0x060018A7 RID: 6311 RVA: 0x00329F89 File Offset: 0x00328189
		// (set) Token: 0x060018A6 RID: 6310 RVA: 0x00329F80 File Offset: 0x00328180
		public virtual List<TExplicitDataTypeConversion> DataTypeConversionList
		{
			get
			{
				return this._dataTypeConversionList;
			}
			set
			{
				this._dataTypeConversionList = value;
			}
		}

		// Token: 0x17000538 RID: 1336
		// (get) Token: 0x060018A9 RID: 6313 RVA: 0x00329F9A File Offset: 0x0032819A
		// (set) Token: 0x060018A8 RID: 6312 RVA: 0x00329F91 File Offset: 0x00328191
		public virtual TExplicitDataTypeConversion DataTypeConversion
		{
			get
			{
				if (this._dataTypeConversionList == null)
				{
					return null;
				}
				return this._dataTypeConversionList[0];
			}
			set
			{
				this._dataTypeConversion = value;
			}
		}

		// Token: 0x17000539 RID: 1337
		// (get) Token: 0x060018AA RID: 6314 RVA: 0x00329FB2 File Offset: 0x003281B2
		// (set) Token: 0x060018AB RID: 6315 RVA: 0x00329FBA File Offset: 0x003281BA
		public virtual TObjectName SequenceName
		{
			get
			{
				return this._sequenceName;
			}
			set
			{
				this._sequenceName = value;
			}
		}

		// Token: 0x1700053A RID: 1338
		// (get) Token: 0x060018AC RID: 6316 RVA: 0x00329FC3 File Offset: 0x003281C3
		// (set) Token: 0x060018AD RID: 6317 RVA: 0x00329FCB File Offset: 0x003281CB
		public virtual TAnalyticFunction Over_clause
		{
			get
			{
				return this._over_clause;
			}
			set
			{
				this._over_clause = value;
			}
		}

		// Token: 0x1700053B RID: 1339
		// (get) Token: 0x060018AE RID: 6318 RVA: 0x00329FD4 File Offset: 0x003281D4
		// (set) Token: 0x060018AF RID: 6319 RVA: 0x00329FDC File Offset: 0x003281DC
		public virtual THiveVariable Hive_variable
		{
			get
			{
				return this._hive_variable;
			}
			set
			{
				this._hive_variable = value;
			}
		}

		// Token: 0x1700053C RID: 1340
		// (get) Token: 0x060018B1 RID: 6321 RVA: 0x00329FEE File Offset: 0x003281EE
		// (set) Token: 0x060018B0 RID: 6320 RVA: 0x00329FE5 File Offset: 0x003281E5
		public virtual bool Symmetric
		{
			get
			{
				return this._isSymmetric;
			}
			set
			{
				this._isSymmetric = value;
			}
		}

		// Token: 0x1700053D RID: 1341
		// (get) Token: 0x060018B3 RID: 6323 RVA: 0x00329FFF File Offset: 0x003281FF
		// (set) Token: 0x060018B2 RID: 6322 RVA: 0x00329FF6 File Offset: 0x003281F6
		public virtual TObjectAccess ObjectAccess
		{
			get
			{
				return this._objectAccess;
			}
			set
			{
				this._objectAccess = value;
			}
		}

		// Token: 0x1700053E RID: 1342
		// (get) Token: 0x060018B4 RID: 6324 RVA: 0x0032A007 File Offset: 0x00328207
		// (set) Token: 0x060018B5 RID: 6325 RVA: 0x0032A00F File Offset: 0x0032820F
		public virtual bool NotOperator
		{
			get
			{
				return this._notOperator;
			}
			set
			{
				this._notOperator = value;
			}
		}

		// Token: 0x1700053F RID: 1343
		// (get) Token: 0x060018B7 RID: 6327 RVA: 0x0032A030 File Offset: 0x00328230
		// (set) Token: 0x060018B6 RID: 6326 RVA: 0x0032A018 File Offset: 0x00328218
		public virtual TSourceToken NotToken
		{
			get
			{
				return this._notToken;
			}
			set
			{
				this._notToken = value;
				this._notOperator = (this._notToken != null);
			}
		}

		// Token: 0x060018B8 RID: 6328 RVA: 0x0032A038 File Offset: 0x00328238
		public override void init(object arg1)
		{
			this._expressionType = (EExpressionType)arg1;
			if (this._expressionType == EExpressionType.logical_and_t || this._expressionType == EExpressionType.logical_or_t)
			{
				this.flattenVisitor = new TFlattenVisitor();
			}
		}

		// Token: 0x060018B9 RID: 6329 RVA: 0x0032A065 File Offset: 0x00328265
		public override void init(object arg1, object arg2)
		{
			this.init(arg1);
			if (this._expressionType == EExpressionType.next_value_for_t)
			{
				this._sequenceName = (TObjectName)arg2;
			}
		}

		// Token: 0x060018BA RID: 6330 RVA: 0x0032A084 File Offset: 0x00328284
		public override void init(object arg1, object arg2, object arg3)
		{
			this.init(arg1);
			EExpressionType expressionType = this._expressionType;
			if (expressionType != EExpressionType.assignment_t)
			{
				if (expressionType == EExpressionType.next_value_for_t)
				{
					this._sequenceName = (TObjectName)arg2;
					if (arg3 != null)
					{
						if (arg3 is TExpression)
						{
							this._leftOperand = (TExpression)arg3;
							return;
						}
						if (arg3 is TWindowDef)
						{
							this.WindowSpecification = (TWindowDef)arg3;
							return;
						}
					}
				}
				else
				{
					this._leftOperand = (TExpression)arg2;
					this._rightOperand = (TExpression)arg3;
				}
				return;
			}
			this._leftOperand = (TExpression)arg2;
			this._rightOperand = (TExpression)arg3;
		}

		// Token: 0x060018BB RID: 6331 RVA: 0x0032A114 File Offset: 0x00328314
		public override void init(object arg1, object arg2, object arg3, object arg4)
		{
			this.init(arg1);
			this._operatorToken = (TSourceToken)arg2;
			EExpressionType expressionType = this._expressionType;
			if (expressionType <= EExpressionType.function_t)
			{
				switch (expressionType)
				{
				case EExpressionType.simple_source_token_t:
					this._sourcetokenOperand = (TSourceToken)arg3;
					base.startToken = this._sourcetokenOperand;
					base.endToken = this._sourcetokenOperand;
					return;
				case EExpressionType.simple_object_name_t:
					this._objectOperand = (TObjectName)arg3;
					base.startToken = this._objectOperand.startToken;
					base.endToken = this._objectOperand.endToken;
					return;
				case EExpressionType.simple_constant_t:
					this._constantOperand = (TConstant)arg3;
					base.startToken = this._constantOperand.startToken;
					base.endToken = this._constantOperand.endToken;
					return;
				default:
					if (expressionType == EExpressionType.list_t)
					{
						goto IL_104;
					}
					if (expressionType != EExpressionType.function_t)
					{
						goto IL_111;
					}
					break;
				}
			}
			else
			{
				if (expressionType == EExpressionType.arrayaccess_t)
				{
					this._arrayAccess = (TArrayAccess)arg3;
					return;
				}
				if (expressionType != EExpressionType.type_constructor_t)
				{
					if (expressionType - EExpressionType.collection_constructor_set_t > 2)
					{
						goto IL_111;
					}
					goto IL_104;
				}
			}
			this._functionCall = (TFunctionCall)arg3;
			return;
			IL_104:
			this._exprList = (TExpressionList)arg3;
			return;
			IL_111:
			if (arg3 != null)
			{
				this._leftOperand = (TExpression)arg3;
				this._leftOperand.ParentExpr = this;
			}
			if (arg4 != null)
			{
				this._rightOperand = (TExpression)arg4;
				this._rightOperand.ParentExpr = this;
			}
		}

		// Token: 0x17000540 RID: 1344
		// (get) Token: 0x060018BD RID: 6333 RVA: 0x0032A406 File Offset: 0x00328606
		// (set) Token: 0x060018BC RID: 6332 RVA: 0x0032A26C File Offset: 0x0032846C
		public virtual TSourceToken OperatorToken
		{
			get
			{
				return this._operatorToken;
			}
			set
			{
				this._operatorToken = value;
				if (this.ExpressionType == EExpressionType.unknown_t)
				{
					if (this._operatorToken.ToString().Equals("%", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.arithmetic_modulo_t;
						return;
					}
					if (this._operatorToken.ToString().Equals("&", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.bitwise_and_t;
						return;
					}
					if (this._operatorToken.ToString().Equals("|", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.bitwise_or_t;
						return;
					}
					if (this._operatorToken.ToString().Equals("", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.bitwise_xor_t;
						return;
					}
					if (this._operatorToken.ToString().Equals("<<", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.left_shift_t;
						return;
					}
					if (this._operatorToken.ToString().Equals(">>", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.right_shift_t;
						return;
					}
				}
				else if (this.ExpressionType == EExpressionType.unary_left_unknown_t)
				{
					if (this._operatorToken.ToString().Equals("|/", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.unary_squareroot_t;
						return;
					}
					if (this._operatorToken.ToString().Equals("||/", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.unary_cuberoot_t;
						return;
					}
					if (this._operatorToken.ToString().Equals("!!", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.unary_factorialprefix_t;
						return;
					}
					if (this._operatorToken.ToString().Equals("@", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.unary_absolutevalue_t;
						return;
					}
					if (this._operatorToken.ToString().Equals("~", StringComparison.CurrentCultureIgnoreCase))
					{
						this._expressionType = EExpressionType.unary_bitwise_not_t;
					}
				}
			}
		}

		// Token: 0x17000541 RID: 1345
		// (get) Token: 0x060018BF RID: 6335 RVA: 0x0032A417 File Offset: 0x00328617
		// (set) Token: 0x060018BE RID: 6334 RVA: 0x0032A40E File Offset: 0x0032860E
		public virtual object Val
		{
			get
			{
				return this._val;
			}
			set
			{
				this._val = value;
			}
		}

		// Token: 0x17000542 RID: 1346
		// (get) Token: 0x060018C0 RID: 6336 RVA: 0x0032A41F File Offset: 0x0032861F
		// (set) Token: 0x060018C1 RID: 6337 RVA: 0x0032A427 File Offset: 0x00328627
		public virtual TConstant ConstantOperand
		{
			get
			{
				return this._constantOperand;
			}
			set
			{
				this._constantOperand = value;
			}
		}

		// Token: 0x17000543 RID: 1347
		// (get) Token: 0x060018C3 RID: 6339 RVA: 0x0032A439 File Offset: 0x00328639
		// (set) Token: 0x060018C2 RID: 6338 RVA: 0x0032A430 File Offset: 0x00328630
		public virtual TNewVariantTypeArgumentList NewVariantTypeArgumentList
		{
			get
			{
				return this._newVariantTypeArgumentList;
			}
			set
			{
				this._newVariantTypeArgumentList = value;
			}
		}

		// Token: 0x17000544 RID: 1348
		// (get) Token: 0x060018C5 RID: 6341 RVA: 0x0032A44A File Offset: 0x0032864A
		// (set) Token: 0x060018C4 RID: 6340 RVA: 0x0032A441 File Offset: 0x00328641
		public virtual TTypeName TypeName
		{
			get
			{
				return this._typeName;
			}
			set
			{
				this._typeName = value;
			}
		}

		// Token: 0x17000545 RID: 1349
		// (get) Token: 0x060018C6 RID: 6342 RVA: 0x0032A452 File Offset: 0x00328652
		// (set) Token: 0x060018C7 RID: 6343 RVA: 0x0032A45A File Offset: 0x0032865A
		public virtual TObjectName FieldName
		{
			get
			{
				return this._fieldName;
			}
			set
			{
				this._fieldName = value;
			}
		}

		// Token: 0x17000546 RID: 1350
		// (get) Token: 0x060018C9 RID: 6345 RVA: 0x0032A4B8 File Offset: 0x003286B8
		// (set) Token: 0x060018C8 RID: 6344 RVA: 0x0032A464 File Offset: 0x00328664
		public virtual TIndirection Indirection
		{
			get
			{
				return this._indirection;
			}
			set
			{
				if (value != null)
				{
					if (value.RealIndices)
					{
						this._subscripts = true;
					}
					else
					{
						this.ExpressionType = EExpressionType.fieldselection_t;
						this._fieldName = value.Indices[0].AttributeName;
						this._fieldName.ObjectType = 51;
					}
					this._indirection = value;
				}
			}
		}

		// Token: 0x17000547 RID: 1351
		// (get) Token: 0x060018CA RID: 6346 RVA: 0x0032A4C0 File Offset: 0x003286C0
		// (set) Token: 0x060018CB RID: 6347 RVA: 0x0032A4C8 File Offset: 0x003286C8
		public virtual bool Subscripts
		{
			get
			{
				return this._subscripts;
			}
			set
			{
				this._subscripts = value;
			}
		}

		// Token: 0x17000548 RID: 1352
		// (get) Token: 0x060018CC RID: 6348 RVA: 0x0032A4D1 File Offset: 0x003286D1
		[Obsolete("Property is deprecated, , please use NotToken instead")]
		public virtual bool NotModifier
		{
			get
			{
				this._notModifier = (this.OperatorToken != null);
				if (this._notModifier)
				{
					this._notModifier = (this.OperatorToken.tokencode == 321);
				}
				return this._notModifier;
			}
		}

		// Token: 0x17000549 RID: 1353
		// (get) Token: 0x060018CE RID: 6350 RVA: 0x0032A511 File Offset: 0x00328711
		// (set) Token: 0x060018CD RID: 6349 RVA: 0x0032A508 File Offset: 0x00328708
		public virtual TOutputFormatPhraseList OutputFormatPhraseList
		{
			get
			{
				return this._outputFormatPhraseList;
			}
			set
			{
				this._outputFormatPhraseList = value;
			}
		}

		// Token: 0x1700054A RID: 1354
		// (get) Token: 0x060018CF RID: 6351 RVA: 0x0032A519 File Offset: 0x00328719
		// (set) Token: 0x060018D0 RID: 6352 RVA: 0x0032A521 File Offset: 0x00328721
		public virtual TExpressionList ExprList
		{
			get
			{
				return this._exprList;
			}
			set
			{
				this._exprList = value;
			}
		}

		// Token: 0x1700054B RID: 1355
		// (get) Token: 0x060018D2 RID: 6354 RVA: 0x0032A533 File Offset: 0x00328733
		// (set) Token: 0x060018D1 RID: 6353 RVA: 0x0032A52A File Offset: 0x0032872A
		public virtual TIntervalExpression IntervalExpr
		{
			get
			{
				return this._intervalExpr;
			}
			set
			{
				this._intervalExpr = value;
			}
		}

		// Token: 0x1700054C RID: 1356
		// (get) Token: 0x060018D4 RID: 6356 RVA: 0x0032A544 File Offset: 0x00328744
		// (set) Token: 0x060018D3 RID: 6355 RVA: 0x0032A53B File Offset: 0x0032873B
		public virtual TObjectNameList FieldList
		{
			get
			{
				return this._fieldList;
			}
			set
			{
				this._fieldList = value;
			}
		}

		// Token: 0x1700054D RID: 1357
		// (get) Token: 0x060018D6 RID: 6358 RVA: 0x0032A555 File Offset: 0x00328755
		// (set) Token: 0x060018D5 RID: 6357 RVA: 0x0032A54C File Offset: 0x0032874C
		public virtual TInExpr InExpr
		{
			get
			{
				return this._inExpr;
			}
			set
			{
				this._inExpr = value;
			}
		}

		// Token: 0x1700054E RID: 1358
		// (get) Token: 0x060018D8 RID: 6360 RVA: 0x0032A566 File Offset: 0x00328766
		// (set) Token: 0x060018D7 RID: 6359 RVA: 0x0032A55D File Offset: 0x0032875D
		public virtual bool OracleOuterJoin
		{
			get
			{
				return this._isOracleOuterJoin;
			}
			set
			{
				this._isOracleOuterJoin = value;
			}
		}

		// Token: 0x1700054F RID: 1359
		// (get) Token: 0x060018D9 RID: 6361 RVA: 0x0032A56E File Offset: 0x0032876E
		// (set) Token: 0x060018DA RID: 6362 RVA: 0x0032A576 File Offset: 0x00328776
		public virtual TExpression ParentExpr
		{
			get
			{
				return this._parentExpr;
			}
			set
			{
				this._parentExpr = value;
			}
		}

		// Token: 0x17000550 RID: 1360
		// (get) Token: 0x060018DC RID: 6364 RVA: 0x0032A592 File Offset: 0x00328792
		// (set) Token: 0x060018DB RID: 6363 RVA: 0x0032A57F File Offset: 0x0032877F
		public virtual TExpression LeftOperand
		{
			get
			{
				return this._leftOperand;
			}
			set
			{
				this._leftOperand = value;
				if (value != null)
				{
					value.ParentExpr = this;
				}
			}
		}

		// Token: 0x17000551 RID: 1361
		// (get) Token: 0x060018DE RID: 6366 RVA: 0x0032A5AD File Offset: 0x003287AD
		// (set) Token: 0x060018DD RID: 6365 RVA: 0x0032A59A File Offset: 0x0032879A
		public virtual TExpression RightOperand
		{
			get
			{
				return this._rightOperand;
			}
			set
			{
				this._rightOperand = value;
				if (value != null)
				{
					value.ParentExpr = this;
				}
			}
		}

		// Token: 0x17000552 RID: 1362
		// (get) Token: 0x060018DF RID: 6367 RVA: 0x0032A5B5 File Offset: 0x003287B5
		// (set) Token: 0x060018E0 RID: 6368 RVA: 0x0032A5BD File Offset: 0x003287BD
		public virtual TExpression LikeEscapeOperand
		{
			get
			{
				return this._likeEscapeOperand;
			}
			set
			{
				this._likeEscapeOperand = value;
			}
		}

		// Token: 0x17000553 RID: 1363
		// (get) Token: 0x060018E1 RID: 6369 RVA: 0x0032A5C6 File Offset: 0x003287C6
		// (set) Token: 0x060018E2 RID: 6370 RVA: 0x0032A5CE File Offset: 0x003287CE
		public virtual TExpression BetweenOperand
		{
			get
			{
				return this._betweenOperand;
			}
			set
			{
				this._betweenOperand = value;
			}
		}

		// Token: 0x17000554 RID: 1364
		// (get) Token: 0x060018E3 RID: 6371 RVA: 0x0032A5D7 File Offset: 0x003287D7
		// (set) Token: 0x060018E4 RID: 6372 RVA: 0x0032A5DF File Offset: 0x003287DF
		public virtual TArrayAccess ArrayAccess
		{
			get
			{
				return this._arrayAccess;
			}
			set
			{
				this._arrayAccess = value;
			}
		}

		// Token: 0x17000555 RID: 1365
		// (get) Token: 0x060018E5 RID: 6373 RVA: 0x0032A5E8 File Offset: 0x003287E8
		// (set) Token: 0x060018E6 RID: 6374 RVA: 0x0032A5F0 File Offset: 0x003287F0
		public virtual EExpressionType ExpressionType
		{
			get
			{
				return this._expressionType;
			}
			set
			{
				this._expressionType = value;
			}
		}

		// Token: 0x17000556 RID: 1366
		// (get) Token: 0x060018E8 RID: 6376 RVA: 0x0032A602 File Offset: 0x00328802
		// (set) Token: 0x060018E7 RID: 6375 RVA: 0x0032A5F9 File Offset: 0x003287F9
		public virtual TObjectName ObjectOperand
		{
			get
			{
				return this._objectOperand;
			}
			set
			{
				this._objectOperand = value;
			}
		}

		// Token: 0x17000557 RID: 1367
		// (get) Token: 0x060018E9 RID: 6377 RVA: 0x0032A60A File Offset: 0x0032880A
		// (set) Token: 0x060018EA RID: 6378 RVA: 0x0032A612 File Offset: 0x00328812
		public virtual TSourceToken SourcetokenOperand
		{
			get
			{
				return this._sourcetokenOperand;
			}
			set
			{
				this._sourcetokenOperand = value;
			}
		}

		// Token: 0x17000558 RID: 1368
		// (get) Token: 0x060018EC RID: 6380 RVA: 0x0032A624 File Offset: 0x00328824
		// (set) Token: 0x060018EB RID: 6379 RVA: 0x0032A61B File Offset: 0x0032881B
		public virtual TCaseExpression CaseExpression
		{
			get
			{
				return this._caseExpression;
			}
			set
			{
				this._caseExpression = value;
			}
		}

		// Token: 0x17000559 RID: 1369
		// (set) Token: 0x060018ED RID: 6381 RVA: 0x0032A62C File Offset: 0x0032882C
		public virtual TSelectSqlNode SubQueryNode
		{
			set
			{
				this._subQueryNode = value;
			}
		}

		// Token: 0x1700055A RID: 1370
		// (get) Token: 0x060018EF RID: 6383 RVA: 0x0032A63E File Offset: 0x0032883E
		// (set) Token: 0x060018EE RID: 6382 RVA: 0x0032A635 File Offset: 0x00328835
		public virtual TSelectSqlStatement SubQuery
		{
			get
			{
				return this._subQuery;
			}
			set
			{
				this._subQuery = value;
			}
		}

		// Token: 0x1700055B RID: 1371
		// (get) Token: 0x060018F0 RID: 6384 RVA: 0x0032A646 File Offset: 0x00328846
		// (set) Token: 0x060018F1 RID: 6385 RVA: 0x0032A64E File Offset: 0x0032884E
		public virtual bool SubQueryInStmt
		{
			get
			{
				return this._isSubQueryInStmt;
			}
			set
			{
				this._isSubQueryInStmt = value;
			}
		}

		// Token: 0x1700055C RID: 1372
		// (get) Token: 0x060018F2 RID: 6386 RVA: 0x0032A657 File Offset: 0x00328857
		// (set) Token: 0x060018F3 RID: 6387 RVA: 0x0032A65F File Offset: 0x0032885F
		public virtual TFunctionCall FunctionCall
		{
			get
			{
				return this._functionCall;
			}
			set
			{
				this._functionCall = value;
			}
		}

		// Token: 0x1700055D RID: 1373
		// (get) Token: 0x060018F4 RID: 6388 RVA: 0x0032A668 File Offset: 0x00328868
		// (set) Token: 0x060018F5 RID: 6389 RVA: 0x0032A670 File Offset: 0x00328870
		public virtual TDatetimeExpression DatetimeExpression
		{
			get
			{
				return this._datetimeExpression;
			}
			set
			{
				this._datetimeExpression = value;
			}
		}

		// Token: 0x1700055E RID: 1374
		// (get) Token: 0x060018F6 RID: 6390 RVA: 0x0032A679 File Offset: 0x00328879
		// (set) Token: 0x060018F7 RID: 6391 RVA: 0x0032A681 File Offset: 0x00328881
		public virtual TIntervalExpression IntervalExpression
		{
			get
			{
				return this._intervalExpression;
			}
			set
			{
				this._intervalExpression = value;
			}
		}

		// Token: 0x060018F8 RID: 6392 RVA: 0x0032A68C File Offset: 0x0032888C
		public override void doParse(TCustomSqlStatement psql, ESqlClause plocation)
		{
			this._OwnerStmt = psql;
			switch (this._expressionType)
			{
			case EExpressionType.simple_object_name_t:
				if (plocation != ESqlClause.selectInto)
				{
					psql.linkColumnReferenceToTable(this._objectOperand, plocation);
					psql.linkColumnToTable(this._objectOperand, plocation);
					return;
				}
				if (this._objectOperand.ToString().StartsWith("#", StringComparison.Ordinal))
				{
					TTable ttable = new TTable();
					this._objectOperand.ObjectType = 3;
					ttable.TableName = this._objectOperand;
					ttable.TableType = ETableSource.objectname;
					ttable.EffectType = ETableEffectType.tetSelectInto;
					psql.addToTables(ttable);
					return;
				}
				this._objectOperand.ObjectType = 10;
				return;
			case EExpressionType.simple_constant_t:
			case EExpressionType.arithmetic_t:
			case EExpressionType.arithmetic_compound_operator_t:
			case EExpressionType.bitwise_t:
			case EExpressionType.boolean_comparison_equal_t:
			case EExpressionType.boolean_comparison_greaterThan_t:
			case EExpressionType.boolean_comparison_lessThan_t:
			case EExpressionType.boolean_comparison_greaterThanOrEqualTo_t:
			case EExpressionType.boolean_comparison_lessThanOrEqualTo_t:
			case EExpressionType.boolean_comparison_notEqualToBrackets_t:
			case EExpressionType.boolean_comparison_notEqualToExclamation_t:
			case EExpressionType.boolean_comparison_notLessThan_t:
			case EExpressionType.boolean_comparison_notGreaterThan_t:
			case EExpressionType.boolean_comparison_leftOuterJoin_t:
			case EExpressionType.boolean_comparison_rightOuterJoin_t:
			case EExpressionType.logical_t:
			case EExpressionType.unary_t:
			case EExpressionType.unary_left_unknown_t:
			case EExpressionType.unary_right_unknown_t:
			case EExpressionType.place_holder_t:
			case EExpressionType.until_changed_t:
			case EExpressionType.is_document_t:
			case EExpressionType.is_distinct_from_t:
			case EExpressionType.is_unknown_t:
			case EExpressionType.is_false_t:
			case EExpressionType.is_true_t:
			case EExpressionType.fieldselection_t:
			case EExpressionType.next_value_for_t:
			case EExpressionType.datetime_t:
			case EExpressionType.model_t:
			case EExpressionType.object_access_t:
			case EExpressionType.xml_t:
			case EExpressionType.units_t:
			case EExpressionType.multiset_union_all_t:
			case EExpressionType.array_access_expr_t:
			case EExpressionType.field_access_t:
			case EExpressionType.hive_variable_t:
			case EExpressionType.xml_method_t:
				break;
			case EExpressionType.arithmetic_plus_t:
			case EExpressionType.arithmetic_minus_t:
			case EExpressionType.arithmetic_times_t:
			case EExpressionType.arithmetic_divide_t:
			case EExpressionType.concatenate_t:
			case EExpressionType.range_t:
			case EExpressionType.power_t:
			case EExpressionType.period_ldiff_t:
			case EExpressionType.period_rdiff_t:
			case EExpressionType.period_p_intersect_t:
			case EExpressionType.period_p_normalize_t:
			case EExpressionType.contains_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.arithmetic_modulo_t:
			case EExpressionType.arithmetic_exponentiation_t:
			case EExpressionType.bitwise_and_t:
			case EExpressionType.bitwise_or_t:
			case EExpressionType.bitwise_xor_t:
			case EExpressionType.bitwise_exclusive_or_t:
			case EExpressionType.scope_resolution_t:
			case EExpressionType.exponentiate_t:
			case EExpressionType.at_time_zone_t:
			case EExpressionType.member_of_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.parenthesis_t:
				this._leftOperand.doParse(psql, plocation);
				return;
			case EExpressionType.assignment_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.list_t:
			case EExpressionType.collection_constructor_set_t:
			case EExpressionType.collection_constructor_multiset_t:
			case EExpressionType.collection_constructor_list_t:
				if (this._exprList != null)
				{
					this._exprList.doParse(psql, plocation);
					return;
				}
				break;
			case EExpressionType.bitwise_shift_left_t:
			case EExpressionType.bitwise_shift_right_t:
				this.LeftOperand.doParse(psql, plocation);
				this.RightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.simple_comparison_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.group_comparison_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.unary_plus_t:
			case EExpressionType.unary_minus_t:
			case EExpressionType.unary_prior_t:
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.unary_connect_by_root_t:
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.unary_factorial_t:
				this.LeftOperand.doParse(psql, plocation);
				return;
			case EExpressionType.unary_squareroot_t:
			case EExpressionType.unary_cuberoot_t:
			case EExpressionType.unary_factorialprefix_t:
			case EExpressionType.unary_absolutevalue_t:
			case EExpressionType.unary_bitwise_not_t:
				this.RightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.unary_binary_operator_t:
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.case_t:
				this._caseExpression.doParse(psql, plocation);
				return;
			case EExpressionType.function_t:
			case EExpressionType.new_structured_type_t:
			case EExpressionType.type_constructor_t:
				if (this._functionCall.Args != null)
				{
					foreach (object obj in ((IEnumerable)this._functionCall.Args))
					{
						((TExpression)obj).ParentExpr = this;
					}
				}
				this._functionCall.doParse(psql, plocation);
				return;
			case EExpressionType.cursor_t:
			case EExpressionType.subquery_t:
			case EExpressionType.multiset_t:
				if (this._subQuery == null)
				{
					this._subQuery = new TSelectSqlStatement(psql.dbvendor);
					this._subQuery.rootNode = this._subQueryNode;
				}
				if (!this._isSubQueryInStmt)
				{
					this._subQuery.doParseStatement(psql);
				}
				else
				{
					this._subQuery.parsestatement(psql, false);
				}
				this._subQuery.Location = plocation;
				return;
			case EExpressionType.null_t:
				this._leftOperand.doParse(psql, plocation);
				return;
			case EExpressionType.between_t:
				if (this._betweenOperand != null)
				{
					this._betweenOperand.doParse(psql, plocation);
				}
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.exists_t:
				if (this._subQuery == null)
				{
					this._subQuery = new TSelectSqlStatement(psql.dbvendor);
					this._subQuery.rootNode = this._subQueryNode;
				}
				if (!this._isSubQueryInStmt)
				{
					this._subQuery.doParseStatement(psql);
					return;
				}
				this._subQuery.parsestatement(psql, false);
				return;
			case EExpressionType.pattern_matching_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				if (this._likeEscapeOperand != null)
				{
					this._likeEscapeOperand.doParse(psql, plocation);
					return;
				}
				break;
			case EExpressionType.floating_point_t:
				this._leftOperand.doParse(psql, plocation);
				return;
			case EExpressionType.logical_and_t:
			case EExpressionType.logical_or_t:
				if (this.getFlattedAndOrExprs().Count > TExpression.BigAndOrNestLevel)
				{
					for (int i = 0; i < this.getFlattedAndOrExprs().Count; i++)
					{
						((TExpression)this.getFlattedAndOrExprs()[i]).doParse(psql, plocation);
					}
					return;
				}
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.logical_xor_t:
			case EExpressionType.is_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.logical_not_t:
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.in_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.group_t:
				this._inExpr.doParse(psql, plocation);
				return;
			case EExpressionType.is_of_type_t:
				this._leftOperand.doParse(psql, plocation);
				return;
			case EExpressionType.at_local_t:
			case EExpressionType.day_to_second_t:
			case EExpressionType.year_to_month_t:
				this._leftOperand.doParse(psql, plocation);
				return;
			case EExpressionType.new_variant_type_t:
				this._newVariantTypeArgumentList.doParse(psql, plocation);
				return;
			case EExpressionType.collate_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.left_join_t:
			case EExpressionType.right_join_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.ref_arrow_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.typecast_t:
				this._leftOperand.doParse(psql, plocation);
				return;
			case EExpressionType.arrayaccess_t:
				this._arrayAccess.doParse(psql, plocation);
				return;
			case EExpressionType.sqlserver_proprietary_column_alias_t:
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.left_shift_t:
			case EExpressionType.right_shift_t:
				this._leftOperand.doParse(psql, plocation);
				this._rightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.array_constructor_t:
				if (this._subQueryNode != null && this._subQuery == null)
				{
					this._subQuery = new TSelectSqlStatement(psql.dbvendor);
					this._subQuery.rootNode = this._subQueryNode;
					this._subQuery.doParseStatement(psql);
					return;
				}
				if (this._exprList != null)
				{
					this._exprList.doParse(psql, plocation);
					return;
				}
				break;
			case EExpressionType.row_constructor_t:
				if (this._exprList != null)
				{
					this._exprList.doParse(psql, plocation);
					return;
				}
				break;
			case EExpressionType.interval_t:
				this._intervalExpr.doParse(psql, plocation);
				return;
			case EExpressionType.multiset_union_t:
			case EExpressionType.multiset_union_distinct_t:
			case EExpressionType.multiset_intersect_t:
			case EExpressionType.multiset_intersect_distinct_t:
			case EExpressionType.multiset_except_t:
			case EExpressionType.multiset_except_distinct_t:
				this.LeftOperand.doParse(psql, plocation);
				this.RightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.json_get_text:
			case EExpressionType.json_get_text_at_path:
			case EExpressionType.json_get_object:
			case EExpressionType.json_get_object_at_path:
			case EExpressionType.json_left_contain:
			case EExpressionType.json_right_contain:
			case EExpressionType.json_exist:
			case EExpressionType.json_any_exist:
			case EExpressionType.json_all_exist:
				this.LeftOperand.doParse(psql, plocation);
				this.RightOperand.doParse(psql, plocation);
				return;
			case EExpressionType.is_a_set_t:
				this.LeftOperand.doParse(psql, plocation);
				break;
			default:
				return;
			}
		}

		// Token: 0x1700055F RID: 1375
		// (get) Token: 0x060018FA RID: 6394 RVA: 0x0032AE35 File Offset: 0x00329035
		// (set) Token: 0x060018F9 RID: 6393 RVA: 0x0032AE2C File Offset: 0x0032902C
		public virtual EQuantifierType QuantifierType
		{
			get
			{
				return this._quantifierType;
			}
			set
			{
				this._quantifierType = value;
			}
		}

		// Token: 0x17000560 RID: 1376
		// (get) Token: 0x060018FB RID: 6395 RVA: 0x0032AE3D File Offset: 0x0032903D
		// (set) Token: 0x060018FC RID: 6396 RVA: 0x0032AE48 File Offset: 0x00329048
		public virtual TSourceToken Quantifier
		{
			get
			{
				return this._quantifier;
			}
			set
			{
				if (value == null)
				{
					return;
				}
				this._quantifier = value;
				if (this._quantifier.tokencode == 339)
				{
					this._quantifierType = EQuantifierType.all;
					return;
				}
				if (this._quantifier.ToString().Equals("any", StringComparison.CurrentCultureIgnoreCase))
				{
					this._quantifierType = EQuantifierType.any;
					return;
				}
				if (this._quantifier.ToString().Equals("some", StringComparison.CurrentCultureIgnoreCase))
				{
					this._quantifierType = EQuantifierType.some;
				}
			}
		}

		// Token: 0x17000561 RID: 1377
		// (get) Token: 0x060018FD RID: 6397 RVA: 0x0032AEB9 File Offset: 0x003290B9
		// (set) Token: 0x060018FE RID: 6398 RVA: 0x0032AEC4 File Offset: 0x003290C4
		public virtual TSourceToken ComparisonOperator
		{
			get
			{
				return this._comparisonOperator;
			}
			set
			{
				this._comparisonOperator = value;
				this._operatorToken = value;
				if (value != null)
				{
					this._comparisonType = TExpression.getComparisonType(value);
					if (value.ToString().Equals("=", StringComparison.CurrentCultureIgnoreCase) && this._expressionType == EExpressionType.simple_comparison_t && this._leftOperand.ToString().StartsWith("@", StringComparison.Ordinal))
					{
						this._expressionType = EExpressionType.assignment_t;
					}
				}
			}
		}

		// Token: 0x060018FF RID: 6399 RVA: 0x0032AF2B File Offset: 0x0032912B
		public override void accept(TParseTreeVisitor v)
		{
			v.preVisit(this);
			v.postVisit(this);
		}

		// Token: 0x06001900 RID: 6400 RVA: 0x0032AF3C File Offset: 0x0032913C
		public override void acceptChildren(TParseTreeVisitor v)
		{
			v.preVisit(this);
			switch (this._expressionType)
			{
			case EExpressionType.simple_object_name_t:
				this._objectOperand.acceptChildren(v);
				break;
			case EExpressionType.arithmetic_plus_t:
			case EExpressionType.arithmetic_minus_t:
			case EExpressionType.arithmetic_times_t:
			case EExpressionType.arithmetic_divide_t:
			case EExpressionType.concatenate_t:
			case EExpressionType.range_t:
			case EExpressionType.power_t:
			case EExpressionType.period_ldiff_t:
			case EExpressionType.period_rdiff_t:
			case EExpressionType.period_p_intersect_t:
			case EExpressionType.period_p_normalize_t:
			case EExpressionType.contains_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.arithmetic_modulo_t:
			case EExpressionType.arithmetic_exponentiation_t:
			case EExpressionType.bitwise_and_t:
			case EExpressionType.bitwise_or_t:
			case EExpressionType.bitwise_xor_t:
			case EExpressionType.bitwise_exclusive_or_t:
			case EExpressionType.scope_resolution_t:
			case EExpressionType.exponentiate_t:
			case EExpressionType.at_time_zone_t:
			case EExpressionType.member_of_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.parenthesis_t:
				this._leftOperand.acceptChildren(v);
				break;
			case EExpressionType.assignment_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.list_t:
			case EExpressionType.collection_constructor_set_t:
			case EExpressionType.collection_constructor_multiset_t:
			case EExpressionType.collection_constructor_list_t:
				if (this._exprList != null)
				{
					for (int i = 0; i < this._exprList.size(); i++)
					{
						this._exprList.getExpression(i).acceptChildren(v);
					}
				}
				break;
			case EExpressionType.bitwise_shift_left_t:
			case EExpressionType.bitwise_shift_right_t:
				this.LeftOperand.acceptChildren(v);
				this.RightOperand.acceptChildren(v);
				break;
			case EExpressionType.simple_comparison_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.group_comparison_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.unary_plus_t:
			case EExpressionType.unary_minus_t:
			case EExpressionType.unary_prior_t:
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.unary_connect_by_root_t:
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.unary_factorial_t:
				this.LeftOperand.acceptChildren(v);
				break;
			case EExpressionType.unary_squareroot_t:
			case EExpressionType.unary_cuberoot_t:
			case EExpressionType.unary_factorialprefix_t:
			case EExpressionType.unary_absolutevalue_t:
			case EExpressionType.unary_bitwise_not_t:
				this.RightOperand.acceptChildren(v);
				break;
			case EExpressionType.unary_binary_operator_t:
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.case_t:
				this._caseExpression.acceptChildren(v);
				break;
			case EExpressionType.function_t:
			case EExpressionType.new_structured_type_t:
			case EExpressionType.type_constructor_t:
				this._functionCall.acceptChildren(v);
				break;
			case EExpressionType.cursor_t:
			case EExpressionType.subquery_t:
			case EExpressionType.multiset_t:
				this._subQuery.acceptChildren(v);
				break;
			case EExpressionType.null_t:
				this._leftOperand.acceptChildren(v);
				break;
			case EExpressionType.between_t:
				if (this._betweenOperand != null)
				{
					this._betweenOperand.acceptChildren(v);
				}
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.exists_t:
				this._subQuery.acceptChildren(v);
				break;
			case EExpressionType.pattern_matching_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				if (this._likeEscapeOperand != null)
				{
					this._likeEscapeOperand.acceptChildren(v);
				}
				break;
			case EExpressionType.floating_point_t:
				this._leftOperand.acceptChildren(v);
				break;
			case EExpressionType.logical_and_t:
			case EExpressionType.logical_or_t:
			case EExpressionType.logical_xor_t:
			case EExpressionType.is_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.logical_not_t:
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.in_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.is_of_type_t:
				this._leftOperand.acceptChildren(v);
				break;
			case EExpressionType.at_local_t:
			case EExpressionType.day_to_second_t:
			case EExpressionType.year_to_month_t:
				this._leftOperand.acceptChildren(v);
				break;
			case EExpressionType.new_variant_type_t:
				this._newVariantTypeArgumentList.acceptChildren(v);
				break;
			case EExpressionType.collate_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.left_join_t:
			case EExpressionType.right_join_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.ref_arrow_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.typecast_t:
				this._leftOperand.acceptChildren(v);
				break;
			case EExpressionType.arrayaccess_t:
				this._arrayAccess.acceptChildren(v);
				break;
			case EExpressionType.sqlserver_proprietary_column_alias_t:
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.left_shift_t:
			case EExpressionType.right_shift_t:
				this._leftOperand.acceptChildren(v);
				this._rightOperand.acceptChildren(v);
				break;
			case EExpressionType.array_constructor_t:
				if (this._subQuery != null)
				{
					this._subQuery.acceptChildren(v);
				}
				else if (this._exprList != null)
				{
					this._exprList.acceptChildren(v);
				}
				break;
			case EExpressionType.row_constructor_t:
				if (this._exprList != null)
				{
					this._exprList.acceptChildren(v);
				}
				break;
			case EExpressionType.interval_t:
				this._intervalExpr.acceptChildren(v);
				break;
			case EExpressionType.multiset_union_t:
			case EExpressionType.multiset_union_distinct_t:
			case EExpressionType.multiset_intersect_t:
			case EExpressionType.multiset_intersect_distinct_t:
			case EExpressionType.multiset_except_t:
			case EExpressionType.multiset_except_distinct_t:
				this.LeftOperand.acceptChildren(v);
				this.RightOperand.acceptChildren(v);
				break;
			case EExpressionType.json_get_text:
			case EExpressionType.json_get_text_at_path:
			case EExpressionType.json_get_object:
			case EExpressionType.json_get_object_at_path:
			case EExpressionType.json_left_contain:
			case EExpressionType.json_right_contain:
			case EExpressionType.json_exist:
			case EExpressionType.json_any_exist:
			case EExpressionType.json_all_exist:
				this.LeftOperand.acceptChildren(v);
				this.RightOperand.acceptChildren(v);
				break;
			case EExpressionType.is_a_set_t:
				this.LeftOperand.acceptChildren(v);
				break;
			}
			v.postVisit(this);
		}

		// Token: 0x17000562 RID: 1378
		// (get) Token: 0x06001901 RID: 6401 RVA: 0x0032B566 File Offset: 0x00329766
		public virtual bool Leaf
		{
			get
			{
				return this.isLeafExpr(this);
			}
		}

		// Token: 0x06001902 RID: 6402 RVA: 0x0032B570 File Offset: 0x00329770
		public virtual bool isLeafExpr(TParseTreeNode pnode)
		{
			bool result = true;
			if (pnode == null)
			{
				return result;
			}
			if (!(pnode is TExpression))
			{
				return result;
			}
			TExpression texpression = (TExpression)pnode;
			if (this.onlyAndOrIsNonLeaf && texpression.ExpressionType != EExpressionType.logical_and_t && texpression.ExpressionType != EExpressionType.logical_or_t)
			{
				return result;
			}
			EExpressionType expressionType = texpression.ExpressionType;
			if (expressionType <= EExpressionType.is_of_type_t)
			{
				if (expressionType <= EExpressionType.list_t)
				{
					if (expressionType - EExpressionType.simple_source_token_t > 2 && expressionType != EExpressionType.list_t)
					{
						goto IL_E8;
					}
				}
				else
				{
					switch (expressionType)
					{
					case EExpressionType.case_t:
					case EExpressionType.function_t:
					case EExpressionType.cursor_t:
					case EExpressionType.subquery_t:
					case EExpressionType.exists_t:
					case EExpressionType.place_holder_t:
						break;
					case EExpressionType.null_t:
					case EExpressionType.between_t:
					case EExpressionType.pattern_matching_t:
						goto IL_E8;
					default:
						if (expressionType - EExpressionType.group_t > 1)
						{
							goto IL_E8;
						}
						break;
					}
				}
			}
			else if (expressionType <= EExpressionType.arrayaccess_t)
			{
				if (expressionType - EExpressionType.new_structured_type_t > 1 && expressionType != EExpressionType.arrayaccess_t)
				{
					goto IL_E8;
				}
			}
			else if (expressionType != EExpressionType.multiset_t)
			{
				switch (expressionType)
				{
				case EExpressionType.member_of_t:
				case EExpressionType.interval_t:
				case EExpressionType.object_access_t:
				case EExpressionType.type_constructor_t:
				case EExpressionType.collection_constructor_set_t:
				case EExpressionType.collection_constructor_multiset_t:
				case EExpressionType.collection_constructor_list_t:
					break;
				case EExpressionType.next_value_for_t:
				case EExpressionType.datetime_t:
				case EExpressionType.model_t:
				case EExpressionType.xml_t:
				case EExpressionType.units_t:
					goto IL_E8;
				default:
					goto IL_E8;
				}
			}
			return result;
			IL_E8:
			if (texpression.LeftOperand != null)
			{
				result = (texpression.LeftOperand == null);
			}
			if (texpression.RightOperand != null)
			{
				result = (texpression.RightOperand == null);
			}
			return result;
		}

		// Token: 0x17000563 RID: 1379
		// (get) Token: 0x06001903 RID: 6403 RVA: 0x0032B68A File Offset: 0x0032988A
		private Stack ExprStack
		{
			get
			{
				if (this.exprStack == null)
				{
					this.exprStack = new Stack();
				}
				return this.exprStack;
			}
		}

		// Token: 0x17000564 RID: 1380
		// (get) Token: 0x06001905 RID: 6405 RVA: 0x0032B6AE File Offset: 0x003298AE
		// (set) Token: 0x06001904 RID: 6404 RVA: 0x0032B6A5 File Offset: 0x003298A5
		public virtual bool VisitSubTree
		{
			get
			{
				return this._visitSubTree;
			}
			set
			{
				this._visitSubTree = value;
			}
		}

		// Token: 0x06001906 RID: 6406 RVA: 0x0032B6B8 File Offset: 0x003298B8
		private bool checkIsVisitSubTree(TParseTreeNode node)
		{
			bool flag = !this.isLeafExpr(node);
			if (flag)
			{
				flag = ((TExpression)node).VisitSubTree;
			}
			return flag;
		}

		// Token: 0x17000565 RID: 1381
		// (set) Token: 0x06001907 RID: 6407 RVA: 0x0032B6E0 File Offset: 0x003298E0
		public virtual TWindowDef WindowSpecification
		{
			set
			{
				if (this.ExpressionType != EExpressionType.function_t)
				{
					return;
				}
				this.FunctionCall.WindowDef = value;
			}
		}

		// Token: 0x06001908 RID: 6408 RVA: 0x0032B6FC File Offset: 0x003298FC
		public virtual void preOrderTraverse(IExpressionVisitor ev)
		{
			if (this.Leaf)
			{
				ev.exprVisit(this, true);
			}
			else
			{
				this.ExprStack.Push(this);
			}
			while (this.ExprStack.Count > 0)
			{
				for (TParseTreeNode tparseTreeNode = (TParseTreeNode)this.ExprStack.Peek(); tparseTreeNode != null; tparseTreeNode = (TParseTreeNode)this.ExprStack.Peek())
				{
					if (!ev.exprVisit(tparseTreeNode, this.isLeafExpr(tparseTreeNode)))
					{
						return;
					}
					if (this.isLeafExpr(tparseTreeNode))
					{
						this.ExprStack.Push(null);
					}
					else if (!this.checkIsVisitSubTree(tparseTreeNode))
					{
						this.ExprStack.Push(null);
					}
					else
					{
						this.ExprStack.Push(((TExpression)tparseTreeNode).LeftOperand);
					}
				}
				this.ExprStack.Pop();
				if (this.ExprStack.Count > 0)
				{
					TParseTreeNode tparseTreeNode = (TParseTreeNode)this.ExprStack.Pop();
					if (this.isLeafExpr(tparseTreeNode))
					{
						this.ExprStack.Push(null);
					}
					else if (!this.checkIsVisitSubTree(tparseTreeNode))
					{
						this.ExprStack.Push(null);
					}
					else
					{
						this.ExprStack.Push(((TExpression)tparseTreeNode).RightOperand);
					}
				}
			}
		}

		// Token: 0x06001909 RID: 6409 RVA: 0x0032B82C File Offset: 0x00329A2C
		public virtual void inOrderTraverse(IExpressionVisitor ev)
		{
			if (this.Leaf)
			{
				ev.exprVisit(this, true);
			}
			else
			{
				this.ExprStack.Push(this);
			}
			while (this.ExprStack.Count > 0)
			{
				for (TParseTreeNode tparseTreeNode = (TParseTreeNode)this.ExprStack.Peek(); tparseTreeNode != null; tparseTreeNode = (TParseTreeNode)this.ExprStack.Peek())
				{
					if (this.isLeafExpr(tparseTreeNode))
					{
						this.ExprStack.Push(null);
					}
					else
					{
						this.ExprStack.Push(((TExpression)tparseTreeNode).LeftOperand);
					}
				}
				this.ExprStack.Pop();
				if (this.ExprStack.Count > 0)
				{
					TParseTreeNode tparseTreeNode = (TParseTreeNode)this.ExprStack.Pop();
					if (!ev.exprVisit(tparseTreeNode, this.isLeafExpr(tparseTreeNode)))
					{
						return;
					}
					if (this.isLeafExpr(tparseTreeNode))
					{
						this.ExprStack.Push(null);
					}
					else
					{
						this.ExprStack.Push(((TExpression)tparseTreeNode).RightOperand);
					}
				}
			}
		}

		// Token: 0x0600190A RID: 6410 RVA: 0x0032B930 File Offset: 0x00329B30
		public virtual void postOrderTraverse(IExpressionVisitor ev)
		{
			if (this.Leaf)
			{
				ev.exprVisit(this, true);
			}
			else
			{
				this.ExprStack.Push(this);
			}
			while (this.ExprStack.Count > 0)
			{
				TParseTreeNode tparseTreeNode = (TParseTreeNode)this.ExprStack.Peek();
				while (tparseTreeNode != null)
				{
					if (this.isLeafExpr(tparseTreeNode))
					{
						this.ExprStack.Push(null);
					}
					else
					{
						this.ExprStack.Push(((TExpression)tparseTreeNode).LeftOperand);
					}
					tparseTreeNode = (TParseTreeNode)this.ExprStack.Peek();
					if (tparseTreeNode != null)
					{
						tparseTreeNode.DummyTag = 1;
					}
				}
				this.ExprStack.Pop();
				tparseTreeNode = (TParseTreeNode)this.ExprStack.Peek();
				while (this.ExprStack.Count > 0 && tparseTreeNode.DummyTag == 2)
				{
					tparseTreeNode = (TParseTreeNode)this.ExprStack.Pop();
					tparseTreeNode.DummyTag = 0;
					if (!ev.exprVisit(tparseTreeNode, this.isLeafExpr(tparseTreeNode)))
					{
						return;
					}
					if (this.ExprStack.Count <= 0)
					{
						break;
					}
					tparseTreeNode = (TParseTreeNode)this.ExprStack.Peek();
				}
				if (this.ExprStack.Count > 0)
				{
					tparseTreeNode = (TParseTreeNode)this.ExprStack.Peek();
					tparseTreeNode.DummyTag = 2;
					if (this.isLeafExpr(tparseTreeNode))
					{
						this.ExprStack.Push(null);
					}
					else
					{
						this.ExprStack.Push(((TExpression)tparseTreeNode).RightOperand);
					}
				}
			}
		}

		// Token: 0x0600190B RID: 6411 RVA: 0x0032BAA3 File Offset: 0x00329CA3
		public virtual void addANDCondition(string condition)
		{
		}

		// Token: 0x0600190C RID: 6412 RVA: 0x0032BAA5 File Offset: 0x00329CA5
		public virtual void addORCondition(string condition)
		{
		}

		// Token: 0x0600190D RID: 6413 RVA: 0x0032BAA8 File Offset: 0x00329CA8
		public static TExpression mergeObjectNameList(TExpression expr, TObjectNameList objectNameList)
		{
			TExpression result = null;
			if (expr._expressionType == EExpressionType.simple_object_name_t)
			{
				expr.ObjectOperand.appendObjectName(objectNameList.getObjectName(0));
				result = expr;
			}
			return result;
		}

		// Token: 0x04001878 RID: 6264
		public static int BigAndOrNestLevel = 100;

		// Token: 0x04001879 RID: 6265
		private bool onlyAndOrIsNonLeaf;

		// Token: 0x0400187A RID: 6266
		private TCustomSqlStatement _OwnerStmt;

		// Token: 0x0400187B RID: 6267
		private TFlattenVisitor flattenVisitor;

		// Token: 0x0400187C RID: 6268
		private TAliasClause _exprAlias;

		// Token: 0x0400187D RID: 6269
		private List<TExplicitDataTypeConversion> _dataTypeConversionList;

		// Token: 0x0400187E RID: 6270
		private TExplicitDataTypeConversion _dataTypeConversion;

		// Token: 0x0400187F RID: 6271
		private TAnalyticFunction _over_clause;

		// Token: 0x04001880 RID: 6272
		private TObjectName _sequenceName;

		// Token: 0x04001881 RID: 6273
		private THiveVariable _hive_variable;

		// Token: 0x04001882 RID: 6274
		private bool _isSymmetric;

		// Token: 0x04001883 RID: 6275
		private TObjectAccess _objectAccess;

		// Token: 0x04001884 RID: 6276
		private TSourceToken _operatorToken;

		// Token: 0x04001885 RID: 6277
		private TSourceToken _notToken;

		// Token: 0x04001886 RID: 6278
		private bool _notOperator;

		// Token: 0x04001887 RID: 6279
		private object _val;

		// Token: 0x04001888 RID: 6280
		private TNewVariantTypeArgumentList _newVariantTypeArgumentList;

		// Token: 0x04001889 RID: 6281
		private TTypeName _typeName;

		// Token: 0x0400188A RID: 6282
		private TObjectName _fieldName;

		// Token: 0x0400188B RID: 6283
		private bool _subscripts;

		// Token: 0x0400188C RID: 6284
		private TIndirection _indirection;

		// Token: 0x0400188D RID: 6285
		private bool _notModifier;

		// Token: 0x0400188E RID: 6286
		private TOutputFormatPhraseList _outputFormatPhraseList;

		// Token: 0x0400188F RID: 6287
		private TIntervalExpression _intervalExpr;

		// Token: 0x04001890 RID: 6288
		private TExpressionList _exprList;

		// Token: 0x04001891 RID: 6289
		private TObjectNameList _fieldList;

		// Token: 0x04001892 RID: 6290
		private TInExpr _inExpr;

		// Token: 0x04001893 RID: 6291
		private bool _isOracleOuterJoin;

		// Token: 0x04001894 RID: 6292
		private TExpression _parentExpr;

		// Token: 0x04001895 RID: 6293
		private TExpression _leftOperand;

		// Token: 0x04001896 RID: 6294
		private TExpression _rightOperand;

		// Token: 0x04001897 RID: 6295
		private TArrayAccess _arrayAccess;

		// Token: 0x04001898 RID: 6296
		private EExpressionType _expressionType;

		// Token: 0x04001899 RID: 6297
		private TObjectName _objectOperand;

		// Token: 0x0400189A RID: 6298
		private TConstant _constantOperand;

		// Token: 0x0400189B RID: 6299
		private TSourceToken _sourcetokenOperand;

		// Token: 0x0400189C RID: 6300
		private TCaseExpression _caseExpression;

		// Token: 0x0400189D RID: 6301
		private TSelectSqlNode _subQueryNode;

		// Token: 0x0400189E RID: 6302
		private TSelectSqlStatement _subQuery;

		// Token: 0x0400189F RID: 6303
		private bool _isSubQueryInStmt;

		// Token: 0x040018A0 RID: 6304
		private TFunctionCall _functionCall;

		// Token: 0x040018A1 RID: 6305
		private TDatetimeExpression _datetimeExpression;

		// Token: 0x040018A2 RID: 6306
		private TIntervalExpression _intervalExpression;

		// Token: 0x040018A3 RID: 6307
		private TExpression _betweenOperand;

		// Token: 0x040018A4 RID: 6308
		private TExpression _likeEscapeOperand;

		// Token: 0x040018A5 RID: 6309
		private EComparisonType _comparisonType;

		// Token: 0x040018A6 RID: 6310
		private TSourceToken _comparisonOperator;

		// Token: 0x040018A7 RID: 6311
		private TSourceToken _quantifier;

		// Token: 0x040018A8 RID: 6312
		private EQuantifierType _quantifierType;

		// Token: 0x040018A9 RID: 6313
		private Stack exprStack;

		// Token: 0x040018AA RID: 6314
		private bool _visitSubTree = true;

		// Token: 0x040018AB RID: 6315
		public const int unknown = 0;

		// Token: 0x040018AC RID: 6316
		public const int PLUS = 1;

		// Token: 0x040018AD RID: 6317
		public const int MINUS = 2;

		// Token: 0x040018AE RID: 6318
		public const int TIMES = 3;

		// Token: 0x040018AF RID: 6319
		public const int DIVIDE = 4;

		// Token: 0x040018B0 RID: 6320
		public const int CONCATENATE = 5;

		// Token: 0x040018B1 RID: 6321
		public const int MODULO = 6;

		// Token: 0x040018B2 RID: 6322
		public const int ASSIGNMENT = 7;

		// Token: 0x040018B3 RID: 6323
		public const int BITWISE_AND = 8;

		// Token: 0x040018B4 RID: 6324
		public const int BITWISE_OR = 9;

		// Token: 0x040018B5 RID: 6325
		public const int BITWISE_XOR = 10;

		// Token: 0x040018B6 RID: 6326
		public const int BITWISE_EXCLUSIVE_OR = 11;

		// Token: 0x040018B7 RID: 6327
		public const int SCOPE_RESOLUTION = 12;

		// Token: 0x040018B8 RID: 6328
		public const int EXPONENTIATE = 13;

		// Token: 0x040018B9 RID: 6329
		public const int compoundAssignment = 14;

		// Token: 0x040018BA RID: 6330
		public const int simpleObjectname = 15;

		// Token: 0x040018BB RID: 6331
		public const int simpleConstant = 16;

		// Token: 0x040018BC RID: 6332
		public const int simpleSourcetoken = 17;

		// Token: 0x040018BD RID: 6333
		public const int compoundParenthesis = 18;

		// Token: 0x040018BE RID: 6334
		public const int compoundUnaryPlus = 19;

		// Token: 0x040018BF RID: 6335
		public const int compoundUnaryMinus = 20;

		// Token: 0x040018C0 RID: 6336
		public const int compoundPrior = 21;

		// Token: 0x040018C1 RID: 6337
		public const int caseExprOperator = 22;

		// Token: 0x040018C2 RID: 6338
		public const int cursorExprOperator = 23;

		// Token: 0x040018C3 RID: 6339
		public const int funcationCallOperator = 24;

		// Token: 0x040018C4 RID: 6340
		public const int datetimeExprOperator = 25;

		// Token: 0x040018C5 RID: 6341
		public const int intervalExprOperator = 26;

		// Token: 0x040018C6 RID: 6342
		public const int modelExprOperator = 27;

		// Token: 0x040018C7 RID: 6343
		public const int subqueryExprOperator = 28;

		// Token: 0x040018C8 RID: 6344
		public const int typeconstructorExprOperator = 29;

		// Token: 0x040018C9 RID: 6345
		public const int objectaccessExprOperator = 30;

		// Token: 0x040018CA RID: 6346
		public const int placeholderExprOperator = 32;

		// Token: 0x040018CB RID: 6347
		public const int in_expr = 34;

		// Token: 0x040018CC RID: 6348
		public const int expr_list = 35;

		// Token: 0x040018CD RID: 6349
		public const int dummyOperator = 37;

		// Token: 0x040018CE RID: 6350
		public const int simple_comparison_conditions = 40;

		// Token: 0x040018CF RID: 6351
		public const int group_comparison_conditions = 41;

		// Token: 0x040018D0 RID: 6352
		public const int in_conditions = 42;

		// Token: 0x040018D1 RID: 6353
		public const int floating_point_conditions = 43;

		// Token: 0x040018D2 RID: 6354
		public const int pattern_matching_conditions = 45;

		// Token: 0x040018D3 RID: 6355
		public const int null_conditions = 46;

		// Token: 0x040018D4 RID: 6356
		public const int between_conditions = 47;

		// Token: 0x040018D5 RID: 6357
		public const int exists_condition = 48;

		// Token: 0x040018D6 RID: 6358
		public const int isoftype_condition = 49;

		// Token: 0x040018D7 RID: 6359
		public const int logical_conditions_and = 50;

		// Token: 0x040018D8 RID: 6360
		public const int logical_conditions_or = 51;

		// Token: 0x040018D9 RID: 6361
		public const int logical_conditions_xor = 52;

		// Token: 0x040018DA RID: 6362
		public const int logical_conditions_not = 53;

		// Token: 0x040018DB RID: 6363
		public const int logical_conditions_is = 54;

		// Token: 0x040018DC RID: 6364
		public const int RANGE = 55;

		// Token: 0x040018DD RID: 6365
		public const int POWER = 56;

		// Token: 0x040018DE RID: 6366
		public const int at_time_zone = 100;

		// Token: 0x040018DF RID: 6367
		public const int at_local = 101;

		// Token: 0x040018E0 RID: 6368
		public const int day_to_second = 102;

		// Token: 0x040018E1 RID: 6369
		public const int year_to_month = 103;

		// Token: 0x040018E2 RID: 6370
		public const int interval_expression = 104;

		// Token: 0x040018E3 RID: 6371
		public const int new_structured_type = 110;

		// Token: 0x040018E4 RID: 6372
		public const int new_variant_type = 111;

		// Token: 0x040018E5 RID: 6373
		public const int period_ldiff = 115;

		// Token: 0x040018E6 RID: 6374
		public const int period_rdiff = 117;

		// Token: 0x040018E7 RID: 6375
		public const int period_p_intersect = 119;

		// Token: 0x040018E8 RID: 6376
		public const int period_p_normalize = 121;

		// Token: 0x040018E9 RID: 6377
		public const int until_changed = 123;

		// Token: 0x040018EA RID: 6378
		public const int is_document = 133;

		// Token: 0x040018EB RID: 6379
		public const int is_distinct_from = 135;

		// Token: 0x040018EC RID: 6380
		public const int true_false_unknown = 137;

		// Token: 0x040018ED RID: 6381
		public const int COLLATE = 223;

		// Token: 0x040018EE RID: 6382
		public const int LEFTJOIN_OP = 224;

		// Token: 0x040018EF RID: 6383
		public const int RIGHTJOIN_OP = 225;

		// Token: 0x040018F0 RID: 6384
		public const int ref_arrow = 226;

		// Token: 0x040018F1 RID: 6385
		public const int typecast = 227;

		// Token: 0x040018F2 RID: 6386
		public const int connect_by_root = 229;

		// Token: 0x040018F3 RID: 6387
		public const int sqlserver_proprietary_column_alias = 230;

		// Token: 0x040018F4 RID: 6388
		public const int mysql_binary_operator = 300;

		// Token: 0x040018F5 RID: 6389
		public const int left_shift = 301;

		// Token: 0x040018F6 RID: 6390
		public const int right_shift = 302;

		// Token: 0x040018F7 RID: 6391
		public const int multisetExprOperator = 310;

		// Token: 0x040018F8 RID: 6392
		public const int fieldSelection = 501;

		// Token: 0x040018F9 RID: 6393
		public const int arrayConstructor = 505;

		// Token: 0x040018FA RID: 6394
		public const int rowConstructor = 509;

		// Token: 0x040018FB RID: 6395
		public const int factorial = 515;

		// Token: 0x040018FC RID: 6396
		public const int squareRoot = 517;

		// Token: 0x040018FD RID: 6397
		public const int cubeRoot = 519;

		// Token: 0x040018FE RID: 6398
		public const int factorialPrefix = 521;

		// Token: 0x040018FF RID: 6399
		public const int absoluteValue = 523;

		// Token: 0x04001900 RID: 6400
		public const int BITWISE_SHIFT_LEFT = 525;

		// Token: 0x04001901 RID: 6401
		public const int BITWISE_SHIFT_RIGHT = 527;

		// Token: 0x04001902 RID: 6402
		public const int BITWISE_NOT = 529;

		// Token: 0x04001903 RID: 6403
		public const int compoundUnaryBitwiseNot = 222;

		// Token: 0x04001904 RID: 6404
		public const int member_of = 541;

		// Token: 0x04001905 RID: 6405
		public const int nextValueOf = 601;

		// Token: 0x04001906 RID: 6406
		public const int UnknownOperator = 901;

		// Token: 0x04001907 RID: 6407
		public const int UnknownUnaryOperator = 905;

		// Token: 0x04001908 RID: 6408
		public const int UnknownUnaryOperatorRight = 909;
	}
}
